package file;

import java.io.File;
import java.io.FileFilter;

/**
 * 获取当前项目目录中名字以"."开头的所有子项
 *
 * 文件过滤器FileFilter

   xxx.listFile()有一个重载的方法，即xxx.listFile(FileFilter)

 * FileFilter是一个接口，所以，需要重写，所以使用匿名内部类重写
   参数部分：有参，参数就是会经过过滤器的一个元素，循环体中定义条件
   如果这个参数经过过滤器是我们要的，那我们就返回true
 */
public class  ListFilesDemo2 {
    public static void main(String[] args) {
        File dir = new File(".");//
        if(dir.isDirectory()){
            FileFilter filter = new FileFilter() {
                @Override
                public boolean accept(File f) {
                    return f.getName().startsWith(".");
                }
                /* 常规写法是：
                @Override
                public boolean accept(File f) {
                    String name = f.getName();
                    boolean a = name.startsWith(".");
                    return a;
                    //把return a里的a替换掉，再把name替换掉，得到上边的写法
                    //重写的accept 方法用于指定过滤条件，当f满足过滤要求时，方法应当返回true
                }
                 */
            };
            //使用lambda表达式来忽略接口与定义(new FileFilter),只留参数列表和方法体
            //写法如下：
            //FileFilter filter = f->f.getName().startsWith(".");

            //其实，filter=lambda表达式，直接写到File[] subs=dir.listFlie(.....里边....)就可以
            //详见Test5和Test6

            //File[] subs = dir.listFiles(filter);
            File[] subs = dir.listFiles(f->f.getName().startsWith("."));
            for(File sub:subs){
                System.out.println(sub.getName());
            }
        }
    }
}
